GraphQL Schema
schemaとはそもそも何か
何のために必要なのか
queryなどとはどういう関係7日
定義の仕方をミスるとどういう影響が出るのか
後のその修正は簡易なのか
どれぐらいアプリケーションと結合するものなのか
標準の拡張子は.graphql
defaultでnullable
String!のように!を付けることでnull非許容になる
APIはRESTのエンドポイントの集合ではなく、型の集合としてとらえられるようになります
このデータ型の集合をスキーマと呼び
schemaは、libraryによって異なるのか #?? 例えばPrismaにはPrisma専用のSchema定義がある?
それは他のlibraryには転用できない?
なぜ統一しない?
そこまでlibraryの変更がないから?
わりかし、共通していることも多くて、学習コストも低いから?
それぞれができることがちがいすぎるから?
標準みたいなものはないのか?
キーワード
引数
エイリアス
同じクエリを同時に参照できないので、別名を与える
フラグメント
関数のように同じデータの指定をまとめられる
操作名query hogehoge
変数
code:graphql
query ($login: String!) { # !はnullにならないことを示す
user(login: $login) {
bio
name
}
}
mutaion
データの更新をする
型
!: Not Null
用語
Fileds...取得データのフィールド値
Arguments...フィールドに渡す引数
Aliases...取得結果のエイリアス(取得結果の名前変更)
Operation Type...操作タイプ(query, mutation, subscriptionのどれか)
Operation Name...操作名
Variables...クエリに渡す引数(フィールドに動的に値を渡せる)
Directives...取得結果の構造にフィールドを含めるか否かを決められる(@include, @skip)
Fragments...フィールド値の集合(共通化に便利)
Inline Fragments...queryに直接埋め込める(取得した型によって結果を分けられるので便利)
ブラウザ上でGraphQLのスキーマ見れるやつ
どういう感じで定義するのが良いのか?
例えばnullableかどうかとはかは、通常のmodelingと同じ様に厳格にやるべきなのか
DBのtable設計と似たように考えるのか?
あるいはもっとフランクに扱っても良いものなのか?
以下は互いに依存しないのか?
GraphQL Schema
server/clientのEntityの定義
DBのtable
1個変更したらいずれも変更しないといけなくなるのか、設計次第でどうにでもなるのか